<?php
/**
 * Description of PessoaDAO
 *
 * @author Magno
 */
class EstadoDAO {

    private $conexao;
    public function __construct() {
        $this->conexao = Conexao::getConexao();
    }

    public function salvar($estado) {

        try {

            if($estado->getEstadoID() != null && $estado->getEstadoID() > 0) {
                $statment = $this->conexao->prepare("UPDATE estado SET
                        nome = :nome,
                        sigla = :sigla
                        WHERE estadoID = :estadoID");

            }else {
                $statment = $this->conexao->prepare("INSERT INTO estado(estadoID,nome,sigla) VALUES (:estadoID,:nome,:sigla);");
            }

            if($statment->execute($estado->toBD())) {

                if($estado->getEstadoID() == null || $estado->getEstadoID() <= 0)
                    $estado->setEstadoID($this->conexao->lastInsertId());

                return $estado;
            }else {
                $erros = $statment->errorInfo();
                throw new Exception("Erro EstadoDAO: ".$erros[2]);
            }

        }catch(PDOException $err) {
            throw new Exception("Erro EstadoDAO:".$err->getMessage());
        }

    }

    public function excluir($estadoID) {

        try {

            $statment = $this->conexao->prepare("DELETE FROM estado WHERE estadoID = :estadoID");
            $statment->bindParam(':estadoID',$estadoID);

            if(!$statment->execute()) {
                $erros = $statment->errorInfo();
                throw new Exception("Erro EstadoDAO: ".$erros[2]);
            }

        }catch(PDOException $err) {
            throw new Exception("Erro EstadoDAO:".$err->getMessage());
        }

    }

    public function listar($pagina = 0,$nome = "",$sigla = "") {
        try {

            $limite = Util::getPaginacao($pagina);
            $where = $this->getWhere($nome,$sigla);
            $estados = array();
            $statment = $this->conexao->query( "SELECT * FROM estado e $where $limite" );

            foreach ( $statment->fetchAll(PDO::FETCH_SERIALIZE) as $row )
                $estados[] = new EstadoBean($row['estadoID'], $row['nome'], $row['sigla']);

            return $estados;

        }catch(PDOException $err) {
            throw new Exception("Erro EstadoDAO:".$err->getMessage());
        }
    }

    public function buscarPorID($estadoID) {
        try {

            $row = $this->conexao->query( "SELECT * FROM estado WHERE estadoID = $estadoID " )->fetch(PDO::FETCH_SERIALIZE);

            if(isset($row['estadoID']) && $row['estadoID'] > 0) {
                $estado = new EstadoBean($row['estadoID'], $row['nome'], $row['sigla']);
                return $estado;
            }else {
                return null;
            }

        }catch(PDOException $err) {
            throw new Exception("Erro EstadoDAO:".$err->getMessage());
        }
    }
    
    public function buscarPorSigla($sigla) {
        try {

            $row = $this->conexao->query( "SELECT * FROM estado WHERE sigla = '$sigla' " )->fetch(PDO::FETCH_SERIALIZE);

            if(isset($row['estadoID']) && $row['estadoID'] > 0) {
                $estado = new EstadoBean($row['estadoID'], $row['nome'], $row['sigla']);
                return $estado;
            }else {
                return null;
            }

        }catch(PDOException $err) {
            throw new Exception("Erro EstadoDAO:".$err->getMessage());
        }
    }

    private function getWhere($nome = "", $sigla = "") {
        $where = " WHERE 1 = 1 ";

        if (isset ($nome) && strlen($nome) > 0) {
            $where = $where." AND e.nome = '$nome' ";
        }

        if (isset ($sigla) && strlen($sigla) > 0) {
            $where = $where." AND e.sigla = '$sigla' ";
        }
        
        return $where;
    }

    public function total($nome = "",$sigla = "") {
        try {

            $where = $this->getWhere($nome,$sigla);
            $total = $this->conexao->query( "SELECT COUNT(e.estadoID) total FROM estado e $where" )->fetch(PDO::FETCH_COLUMN);
            return $total;

        }catch(PDOException $err) {
            throw new Exception("Erro EstadoDAO:".$err->getMessage());
        }
    }

}
?>